import router from './routes';
import store from '../store/store';
// import sysConfig from '@/config/sysConfig';
import { Message } from 'element-ui';
import NProgress from 'nprogress'; // progress bar
import 'nprogress/nprogress.css'; // progress bar style

NProgress.configure({ showSpinner: false }); // 进度条配置
router.beforeEach((to, from, next) => {
  // /* 判断是否iframe内嵌改样式 */
  // if (sysConfig.iframe && sysConfig.iframe.iframeKey) {
  //   const _existKey = window.location.href.search(sysConfig.iframe.iframeKey);
  //   if (_existKey === -1) {
  //     store.dispatch('setLayOutStatus', true);
  //   } else {
  //     store.dispatch('setLayOutStatus', false);
  //   }
  // }
  // /* 结束 */
  NProgress.start(); // 展示进度条

  const permissions = store.state.user.permissions || []; // 用户具有的权限集合
  if (permissions.length) { // 如果store里有用户信息，直接鉴权，没有调用户接口后再鉴权
    VERIFY_PERMISSION(permissions, { to, from, next });
  } else {
    GET_USER_INFO({ to, from, next });
  }
});
router.afterEach(() => {
  // 路由完成后做些事情
  NProgress.done(); // 隐藏进度条
});

// =================================================================== 工具函数
// 百度统计代码
window._hmt.push(['_setAutoPageview', false]);
const baiduTrackPageview = function (to) {
  if (to.path) {
    const str = '/#' + to.fullPath;
    if (window._hmt) window._hmt.push(['_trackPageview', str]);
  }
};

// 路由鉴权
const VERIFY_PERMISSION = function (permissions = [], option) {
  /**
    * @param {Array} permissions  后台返回的用户的权限
    * @param {Object} option      路由相关变量
  */
  const { to, next } = option;
  const roles = to.meta.roles || []; // 路由配置的权限组合,如果没配置默认有权限
  const isPermission = permissions.some(p => (roles.length ? roles.indexOf(p) !== -1 : true)); // 是否有权看这个页面

  if (isPermission) {
    baiduTrackPageview(to);
    next();
  } else {
    Message({
      message: '无权限访问此页面',
      type: 'error',
      duration: 5 * 1000
    });
    next({ path: '/403' });
  };
};

// 获取用户信息再鉴权
const GET_USER_INFO = function (option) {
  /**
    * @param {Object} option 路由相关变量
  */
  const { to, from, next } = option;
  store.dispatch('ActionUser').then(res => {
    if (to.path === '/login') {
      next({ path: '/' });
    } else {
      if (to.meta.roles === undefined || to.meta.roles.length === 0) {
        baiduTrackPageview(to);
        next();
      } else {
        VERIFY_PERMISSION(res.permissions, { to, from, next });
      }
    }
  }).catch(() => {
    Message({
      message: '获取用户信息失败',
      type: 'error'
    });
    next({ path: '/403' });
  });
};
